
package com.jf.cloud.combo.mapper;

import com.jf.cloud.combo.model.ComboSpu;
import com.jf.cloud.common.product.vo.ComboSpuVO;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 套餐商品项
 *
 * @author zz
 * @date 2022-08-16 09:18:06
 */
public interface ComboSpuMapper {

    /**
     * 获取套餐商品项列表
     * @return 套餐商品项列表
     */
    List<ComboSpu> list();

    /**
     * 根据套餐商品项id获取套餐商品项
     *
     * @param comboSpuId 套餐商品项id
     * @return 套餐商品项
     */
    ComboSpuVO getByComboSpuId(@Param("comboSpuId") Long comboSpuId);

    /**
     * 保存套餐商品项
     * @param comboSpu 套餐商品项
     */
    void save(@Param("comboSpu") ComboSpu comboSpu);

    /**
     * 更新套餐商品项
     * @param comboSpu 套餐商品项
     */
    void update(@Param("comboSpu") ComboSpu comboSpu);

    /**
     * 批量更新套餐商品项
     * @param comboSpuList
     */
    void batchUpdate(@Param("comboSpuList") List<ComboSpu> comboSpuList);

    /**
     * 根据套餐商品项id删除套餐商品项
     * @param comboSpuId
     */
    void deleteById(@Param("comboSpuId") Long comboSpuId);

    /**
     * 批量保存
     * @param comboSpuList
     * @param comboId
     */
    void insertBatch(@Param("comboSpuList") List<ComboSpu> comboSpuList, @Param("comboId") Long comboId);

    /**
     * 改变套餐商品状态
     * @param comboSpu
     */
    void updateStatus(@Param("comboSpu") ComboSpu comboSpu);

    /**
     * 根据套餐ID获取搭配商品信息
     * @param comboId
     * @return
     */
    List<ComboSpuVO> matchingSpuByComboId(@Param("comboId") Long comboId, @Param("status") Integer status);


    /**
     * 根据套餐商品项id获取套餐商品项
     *
     * @param spuId 套餐商品id
     * @param comboId
     * @return 套餐商品项
     */
    ComboSpuVO getBySpuId(@Param("spuId") Long spuId,@Param("comboId") Long comboId);

    /**
     * 根据套餐id获取主商品信息(状态不为删除的)
     * @param comboId
     * @return
     */
    ComboSpuVO getMainSpuByComboId(@Param("comboId") Long comboId);

    /**
     * 根据套餐id获取主商品信息(状态不为删除的)
     * @param comboId
     * @return
     */
    ComboSpuVO getMainComboSpuId(@Param("comboId") Long comboId);

    /**
     * 根据套餐id获取搭配商品信息
     * @param comboId
     * @return
     */
    List<ComboSpuVO> getMatchSpuByComboId(@Param("comboId") Long comboId);

    /**
     * 根据搭配商品id列表和套餐id批量修改状态
     * @param spuIdS
     * @param comboId
     * @param status
     */
    void batchUpdateMatchSpuStatus(@Param("spuIdS") List<Long> spuIdS,@Param("comboId") Long comboId,@Param("status") Integer status);

    /**
     * 根据comboSpuIdList批量删除
     * @param comboSpuIdList
     */
    void deleteBatch(@Param("comboSpuIdList") List<Long> comboSpuIdList);

    /**
     * 根据套餐id集合批量将已过期未改变的状态的套餐商品项的状态修改为失效
     * @param comboIdList
     * @param status
     */
    void batchUpdateByComboIdList(@Param("comboIdList") List<Long> comboIdList,@Param("status") Integer status);

    /**
     * 根据套餐id获取套餐商品项信息
     * @param comboIdList
     * @return
     */
    List<ComboSpuVO> comboSpuByComboIds(@Param("comboIdList") List<Long> comboIdList);

    /**
     * 批量把状态为正常的套餐商品修改为失效状态
     * @param spuIdList
     */
    void batchComboSpuStatus(@Param("spuIdList") List<Long> spuIdList);

}
